package cn.com.cifi.mars.mapper.mars;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import cn.com.cifi.mars.bean.bo.SignProductCodeBO;
import cn.com.cifi.mars.bean.bo.SignProductDetailBO;
import cn.com.cifi.mars.bean.dto.returnPlan.CombinationProductDataDto;
import cn.com.cifi.mars.entity.SignPlanVersionSupplyDetail;

/**
 * <p>
 * 签约计划供货明细表 Mapper 接口
 * </p>
 *
 * @author yyd
 * @since 2019-11-08
 */
public interface SignPlanVersionSupplyDetailMapper extends BaseMapper<SignPlanVersionSupplyDetail> {

    /**
     * 根据版本id和类型查询供货计划详细信息
     * @param versionId 签约版本id
     * @param type 层级类型
     * @param isDel 是否删除
     * @return
     */
    List<SignPlanVersionSupplyDetail>selectByType(@Param("versionId")String versionId, @Param("type")String type,
                                                            @Param("isDel") int isDel);
    List<SignPlanVersionSupplyDetail>selectByVersionIdListAndType(@Param("singIdList")List singIdList, @Param("type")String type,
                                                  @Param("isDel") int isDel);
    /**
     * 查询该组团下产品构成的最晚供货计划日期
     * @param signProductCodeBO 产品构成属性类别
     * @return
     */
    LocalDateTime selectLatestSupplyDate(SignProductCodeBO signProductCodeBO);

    /**
     * 查询该分期组团下产品构成列表
     * @param versionId 签约版本id
     * @param groupId 组团id
     * @param isDel 是否删除
     * @return
     */
    List<SignProductCodeBO> selectProductCodes(@Param("versionId")String versionId, @Param("groupId") String groupId,
                                           @Param("isDel") int isDel);


    /**
     * 批量新增签约计划供货详情
     * @param signPlanVersionSupplyDetailList 签约计划供货详情列表
     */
    void insertList(@Param("list") List<SignPlanVersionSupplyDetail> signPlanVersionSupplyDetailList);

    /**
     * 查询组团下产品构成的供货详情列表
     * @param signProductCodeBO
     * @return
     */
    List<SignPlanVersionSupplyDetail> selectSignPlanSupplyDetail(SignProductCodeBO signProductCodeBO);

    /**
     * 查询组团下该产品构成供货计划详情列表
     * @param signProductCodeBO
     * @return
     */
    List<SignPlanVersionSupplyDetail> selectSupplyPlanDetail(SignProductCodeBO signProductCodeBO);


    /**
     * 查询该版本层级名称及业态名称的产品构成签约详情
     * @param versionId 签约版本id
     * @param type 层级类型
     * @param productName 层级名称
     * @param proTypeName 业态名称
     * @param isDel 是否删除
     * @return
     */
    List<SignPlanVersionSupplyDetail>selectProductDetail(@Param("versionId")String versionId,@Param("groupId")String groupId,
                                                         @Param("type")String type, @Param("productName")String productName,
                                                         @Param("proTypeName") String proTypeName, @Param("isDel") int isDel);


    /**
     * 获取产品构成中最新的结转日期
     */
    LocalDateTime  selectNewestCarryOverTime(SignProductCodeBO signProductCodeBO);


    /**
     * 根据产品构成、经营方式、装修标准、属性标签做分组
     * @param versionId
     * @return
     */
    List<SignPlanVersionSupplyDetail> selectOrgCodeList(@Param("versionId") String versionId);

    /**
     * 查询版本下楼栋id集合
     * @param versionId 版本id
     * @param isDel 是否删除
     * @return
     */
    List<String> selectBuildingIdList(@Param("versionId") String versionId,@Param("isDel") int isDel);

    /**
     * 查询业态签约供货详情数据
     * @param signProductCodeBO 业态数据
     * @return
     */
    List<SignPlanVersionSupplyDetail> selectByCode(SignProductCodeBO signProductCodeBO);

    /**
     * 查询指定层级类型供货详情数据
     * @return
     */
    List<SignPlanVersionSupplyDetail> selectByTypeAndIds(@Param("versionIds")List<String> versionIds,@Param("type")String type,
                                                   @Param("isDel") int isDel);

    /**
     * 根据签约计划版本id列表查询详细信息
     * @param versionIds 版本id集合
     * @param isDel 是否删除
     * @return
     */
    List<SignPlanVersionSupplyDetail> selectByVersionIds(@Param("versionIds")List<String> versionIds,@Param("isDel")int isDel);


    /**
     * 查询版本的总货值
     * @param versionIds
     * @param isDel
     * @return
     */
    BigDecimal selectTotalValue(@Param("versionIds")List<String> versionIds,@Param("isDel")int isDel);


    /**
     * 查询该业态组合的供货详情
     * @param signProductCodeBO
     * @return
     */
    SignProductDetailBO selectCombinationCodeDetail(SignProductCodeBO signProductCodeBO);

    /**
     * 获取各组团下各组合业态向下结转日期
     * @param versionId
     * @param isDel
     * @return
     */
    List<CombinationProductDataDto> selectCarryOverTime(@Param("versionId") String versionId, @Param("type") String type, @Param("isDel")int isDel);
	
    void copyVesionDetail(@Param("sourceVersionId")String versionId, @Param("targetVersionId")String signPlanVersionId);

}
